esp32 micropython的ble终于更新配对功能啦!

您所在的位置:网站首页 esp32 蓝牙配对 esp32 micropython的ble终于更新配对功能啦!

esp32 micropython的ble终于更新配对功能啦!

#esp32 micropython的ble终于更新配对功能啦!| 来源: 网络整理| 查看: 265

其实这个ISSUE在mpy库被提了好久了,不知道为啥,大约五天前突然被解决,也就是说,最新的主分支已经可以用gap_pair功能了,貌似还有个gap_passkey,现在mpy的ble功能终于补上最后一块了,遗憾的是目前还不能进行功率的控制。 github上有个mpy ble hid设备的库,也挺好的,用01studio的手柄我改了程序,能用,但是不能二次链接重连,自己想了半天也没明白,最后鼓起勇气在提了ISSUE,平生第一次提ISSUE,没想到过了一天被答复了,还让我有空测试下功能,感谢伟大的开源精神! 说到开源,其实在国内前途很不好,有文化的原因,也有现实制度原因,国内的玩家更喜欢白嫖,不是批判谁也不是装清高,我是觉得大家是该有点贡献精神的,我虽然大多拿钱办事,但是也不忘贡献点力量,写写博客,偶尔提交点pr,国内主要是生存压力比较大,没有太多自己的时间玩爱好,都喜欢要现成的。我个人觉得01studio真的不如把库放在GITEE,说是开源项目,实际上也就是微信群聊,都搞了4个开源项目了,贡献者好像还是只有我一个,当然主要是老板送我板子我不好意思不贡献哈哈,能在群里唠唠项目提提意见就不错了,能会git操作的、有足够水平的、愿意贡献代码的,层层筛选下来太少了,当然还是有很多活跃用户在群里贡献了代码,只是不习惯GIT操作而已。 当ISSUE被解决时竟然有一丝丝感动,地球的另外一个角落的某个嵌入工程师不嫌弃我的蹩脚塑料英语,不限国家、肤色、生活习性方式,只为了解决同一个问题展开讨论,感觉真好,该死的是那些总夹带私货别有用心的人,污染了环境,想起列侬的imagine了,理想全世界的人无隔阂在一起,太过于美好,虽然知道不可能实现,也忍不住去想想那样一副画面。 拉回正题,搬运了一个ble hid的库,很有用:

# MicroPython Human Interface Device library # Copyright (C) 2021 H. Groefsema # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . from micropython import const import struct import bluetooth import json import binascii from bluetooth import UUID F_READ = bluetooth.FLAG_READ F_WRITE = bluetooth.FLAG_WRITE F_READ_WRITE = bluetooth.FLAG_READ | bluetooth.FLAG_WRITE F_READ_NOTIFY = bluetooth.FLAG_READ | bluetooth.FLAG_NOTIFY ATT_F_READ = 0x01 ATT_F_WRITE = 0x02 # Advertising payloads are repeated packets of the following form: # 1 byte data length (N + 1) # 1 byte type (see constants below) # N bytes type-specific data _ADV_TYPE_FLAGS = const(0x01) _ADV_TYPE_NAME = const(0x09) _ADV_TYPE_UUID16_COMPLETE = const(0x3) _ADV_TYPE_UUID32_COMPLETE = const(0x5) _ADV_TYPE_UUID128_COMPLETE = const(0x7) _ADV_TYPE_UUID16_MORE = const(0x2) _ADV_TYPE_UUID32_MORE = const(0x4) _ADV_TYPE_UUID128_MORE = const(0x6) _ADV_TYPE_APPEARANCE = const(0x19) # IRQ peripheral role event codes _IRQ_CENTRAL_CONNECT = const(1) _IRQ_CENTRAL_DISCONNECT = const(2) _IRQ_GATTS_WRITE = const(3) _IRQ_GATTS_READ_REQUEST = const(4) _IRQ_SCAN_RESULT = const(5) _IRQ_SCAN_DONE = const(6) _IRQ_PERIPHERAL_CONNECT = const(7) _IRQ_PERIPHERAL_DISCONNECT = const(8) _IRQ_GATTC_SERVICE_RESULT = const(9) _IRQ_GATTC_SERVICE_DONE = const(10) _IRQ_GATTC_CHARACTERISTIC_RESULT = const(11) _IRQ_GATTC_CHARACTERISTIC_DONE = const(12) _IRQ_GATTC_DESCRIPTOR_RESULT = const(13) _IRQ_GATTC_DESCRIPTOR_DONE = const(14) _IRQ_GATTC_READ_RESULT = const(15) _IRQ_GATTC_READ_DONE = const(16) _IRQ_GATTC_WRITE_DONE = const(17) _IRQ_GATTC_NOTIFY = const(18) _IRQ_GATTC_INDICATE = const(19) _IRQ_GATTS_INDICATE_DONE = const(20) _IRQ_MTU_EXCHANGED = const(21) _IRQ_L2CAP_ACCEPT = const(22) _IRQ_L2CAP_CONNECT = const(23) _IRQ_L2CAP_DISCONNECT = const(24) _IRQ_L2CAP_RECV = const(25) _IRQ_L2CAP_SEND_READY = const(26) _IRQ_CONNECTION_UPDATE = const(27) _IRQ_ENCRYPTION_UPDATE = const(28) _IRQ_GET_SECRET = const(29) _IRQ_SET_SECRET = const(30) _IRQ_PASSKEY_ACTION = const(31) _IO_CAPABILITY_DISPLAY_ONLY = const(0) _IO_CAPABILITY_DISPLAY_YESNO = const(1) _IO_CAPABILITY_KEYBOARD_ONLY = const(2) _IO_CAPABILITY_NO_INPUT_OUTPUT = const(3) _IO_CAPABILITY_KEYBOARD_DISPLAY = const(4) _PASSKEY_ACTION_INPUT = const(2) _PASSKEY_ACTION_DISP = const(3) _PASSKEY_ACTION_NUMCMP = const(4) class Advertiser: # Generate a payload to be passed to gap_advertise(adv_data=...). def advertising_payload(self, limited_disc=False, br_edr=False, name=None, services=None, appearance=0): payload = bytearray() def _append(adv_type, value): nonlocal payload payload += struct.pack("BB", len(value) + 1, adv_type) + value _append( _ADV_TYPE_FLAGS, struct.pack("B", (0x01 if limited_disc else 0x02) + (0x18 if br_edr else 0x04)), ) if name: _append(_ADV_TYPE_NAME, name) if services: for uuid in services: b = bytes(uuid) if len(b) == 2: _append(_ADV_TYPE_UUID16_COMPLETE, b) elif len(b) == 4: _append(_ADV_TYPE_UUID32_COMPLETE, b) elif len(b) == 16: _append(_ADV_TYPE_UUID128_COMPLETE, b) # See org.bluetooth.characteristic.gap.appearance.xml if appearance: _append(_ADV_TYPE_APPEARANCE, struct.pack("


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3